En el caso del Scoring de Crédito lo que más interesa en detectar a los NO pagadores, por esa razón ejecutaremos 5 veces la validación cruzada usando 10 grupos. En cada paso de la valización cruzada vamos sumando los no pagadores detectados, luego para cada ejecución de la valizadación cruzada almacenamos la detección de los no pagadores en una entrada del vector respectivo al método para luego hacer un gráfico comparativo.
Se cargan las librerías
numero.filas <- nrow(datos)
cantidad.validacion.cruzada <- 5
cantidad.grupos <- 10
deteccion.no.radial <- c()
deteccion.no.linear <- c()
deteccion.no.polynomial <- c()
deteccion.no.sigmoid <- c()
tiempo.usual <- Sys.time()
for(i in seq_len(cantidad.validacion.cruzada)){
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
no.radial <- 0
no.linear <- 0
no.polynomial <- 0
no.sigmoid <- 0
# Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
# grupos (Folds)
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "radial")
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
#Detección de los NO Pagadores
no.radial <- no.radial + MC["No", "No"]
modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "linear")
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
#Detección de los NO Pagadores
no.linear <- no.linear + MC["No", "No"]
modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "polynomial")
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
#Detección de los NO Pagadores
no.polynomial <- no.polynomial + MC["No", "No"]
modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "sigmoid")
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
#Detección de los NO Pagadores
no.sigmoid <- no.sigmoid + MC["No", "No"]
}
deteccion.no.radial[i] <- no.radial
deteccion.no.linear[i] <- no.linear
deteccion.no.polynomial[i] <- no.polynomial
deteccion.no.sigmoid[i] <- no.sigmoid
}
tiempo.usual <- Sys.time() - tiempo.usualTime difference of 1.577015 mins
Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
resultados <- data.frame("radial" = deteccion.no.radial,
"linear" = deteccion.no.linear,
"polynomial" = deteccion.no.polynomial,
"sigmoid" = deteccion.no.sigmoid)
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador en SVM",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Se cargan las librerías
numero.filas <- nrow(datos)
cantidad.validacion.cruzada <- 5
cantidad.grupos <- 10
deteccion.no.radial <- c()
deteccion.no.linear <- c()
deteccion.no.polynomial <- c()
deteccion.no.sigmoid <- c()
tiempo.usual <- Sys.time()
for(i in seq_len(cantidad.validacion.cruzada)){
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
no.radial <- 0
no.linear <- 0
no.polynomial <- 0
no.sigmoid <- 0
# Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
# grupos (Folds)
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "radial", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los NO Pagadores
no.radial <- no.radial + MC["No", "No"]
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "linear", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los NO Pagadores
no.linear <- no.linear + MC["No", "No"]
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "polynomial", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los NO Pagadores
no.polynomial <- no.polynomial + MC["No", "No"]
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "sigmoid", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los NO Pagadores
no.sigmoid <- no.sigmoid + MC["No", "No"]
}
deteccion.no.radial[i] <- no.radial
deteccion.no.linear[i] <- no.linear
deteccion.no.polynomial[i] <- no.polynomial
deteccion.no.sigmoid[i] <- no.sigmoid
}
tiempo.usual <- Sys.time() - tiempo.usualTime difference of 1.606095 mins
Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
resultados <- data.frame("radial" = deteccion.no.radial,
"linear" = deteccion.no.linear,
"polynomial" = deteccion.no.polynomial,
"sigmoid" = deteccion.no.sigmoid)
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador en SVM",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Otra forma de hacerlo es:
Se cargan las librerías
numero.filas <- nrow(datos)
cantidad.validacion.cruzada <- 5
cantidad.grupos <- 10
kernels <- c("radial", "linear", "polynomial", "sigmoid")
resultados <- matrix(0, nrow = cantidad.validacion.cruzada, ncol = 4) # ncol la cantidad de modelos a usar
colnames(resultados) <- kernels # opcional
tiempo.usual <- Sys.time()
for(i in seq_len(cantidad.validacion.cruzada)){
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
for(kernel in kernels) {
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = kernel, probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
resultados[i, kernel] <- resultados[i, kernel] + MC["No","No"] # Detección de los NO Pagadores
}
}
}
tiempo.usual <- Sys.time() - tiempo.usualTime difference of 1.591441 mins
Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
matplot(resultados, type="b",lty = 1, lwd = 1,
main = "Detección del NO pagador en SVM",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados")
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1, horiz = TRUE, col = 1:4)Se cargan las librerías
setwd("~/Desktop/Datos/")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)Proceso Paralelo
Constructor del cluster
clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5
tiempo.paralelo <- Sys.time()
resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
library(e1071)
library(caret)
numero.filas <- nrow(datos)
cantidad.grupos <- 10
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
no.radial <- 0
no.linear <- 0
no.polynomial <- 0
no.sigmoid <- 0
# Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
# grupos (Folds)
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "radial", probability = FALSE)
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los NO Pagadores
no.radial <- no.radial + MC["No", "No"]
modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "linear", probability = FALSE)
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los NO Pagadores
no.linear <- no.linear + MC["No", "No"]
modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "polynomial", probability = FALSE)
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los NO Pagadores
no.polynomial <- no.polynomial + MC["No", "No"]
modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "sigmoid", probability = FALSE)
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los NO Pagadores
no.sigmoid <- no.sigmoid + MC["No", "No"]
}
return(list("radial" = no.radial,
"linear" = no.linear,
"polynomial" = no.polynomial,
"sigmoid" = no.sigmoid))
})
tiempo.paralelo <- Sys.time() - tiempo.paralelo
stopCluster(clp)Time difference of 28.33168 secs
El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor
radial linear polynomial sigmoid
[1,] 395 399 25 306
[2,] 392 399 28 307
[3,] 398 399 29 305
[4,] 399 399 29 305
[5,] 398 400 26 302
Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador en SVM",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Se cargan las librerías
setwd("~/Desktop/Datos/")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)Proceso Paralelo
Constructor del cluster
clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5
tiempo.paralelo <- Sys.time()
resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
library(trainR)
library(caret)
numero.filas <- nrow(datos)
cantidad.grupos <- 10
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
no.radial <- 0
no.linear <- 0
no.polynomial <- 0
no.sigmoid <- 0
# Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
# grupos (Folds)
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "radial", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los NO Pagadores
no.radial <- no.radial + MC["No", "No"]
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "linear", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los NO Pagadores
no.linear <- no.linear + MC["No", "No"]
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "polynomial", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los NO Pagadores
no.polynomial <- no.polynomial + MC["No", "No"]
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "sigmoid", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los NO Pagadores
no.sigmoid <- no.sigmoid + MC["No", "No"]
}
return(list("radial" = no.radial,
"linear" = no.linear,
"polynomial" = no.polynomial,
"sigmoid" = no.sigmoid))
})
tiempo.paralelo <- Sys.time() - tiempo.paralelo
stopCluster(clp)Time difference of 28.04616 secs
El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor
radial linear polynomial sigmoid
[1,] 395 399 24 308
[2,] 397 402 28 306
[3,] 396 399 25 306
[4,] 399 400 27 308
[5,] 395 390 26 304
Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador en SVM",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Otra forma de hacerlo es:
Proceso Paralelo
clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5
clusterExport(clp, "cantidad.validacion.cruzada")
tiempo.paralelo <- Sys.time()
resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
library(trainR)
library(caret)
numero.filas <- nrow(datos)
cantidad.grupos <- 10
kernels <- c("radial", "linear", "polynomial", "sigmoid")
resultados <- matrix(0, nrow = cantidad.validacion.cruzada, ncol = 4) # ncol la cantidad de modelos a usar
colnames(resultados) <- kernels # opcional
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
taprendizaje <- datos[-muestra, ]
for(kernel in kernels) {
modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = kernel, probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
resultados[indice, kernel] <- resultados[indice, kernel] + MC["No","No"] # Detección de los NO Pagadores
}
}
return(resultados)
})
tiempo.paralelo <- Sys.time() - tiempo.paralelo
stopCluster(clp)Time difference of 28.18422 secs
El resultado es una lista de matrices, debemos de convertirlo para manejarlo mejor
radial linear polynomial sigmoid
[1,] 393 399 24 304
[2,] 396 399 27 305
[3,] 395 400 24 306
[4,] 398 401 27 307
[5,] 396 399 27 304
Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador en SVM",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Se cargan las librerías
library(caret)
library(e1071)
library(kknn)
library(class)
library(rpart)
library(randomForest)
library(ada)
library(nnet)
library(magrittr)
library(dplyr)setwd("~/Desktop/Datos/")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)numero.filas <- nrow(datos)
cantidad.validacion.cruzada <- 5
cantidad.grupos <- 10
deteccion.no.svm <- c()
deteccion.no.knn <- c()
deteccion.no.bayes <- c()
deteccion.no.arbol <- c()
deteccion.no.bosque <- c()
deteccion.no.potenciacion <- c()
deteccion.no.red <- c()
# Medimos tiempo de ejecución
tiempo.no.paralelo <- Sys.time()
# Validación cruzada 5 veces
for (i in 1:cantidad.validacion.cruzada) {
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
no.svm <- 0
no.knn <- 0
no.bayes <- 0
no.arbol <- 0
no.bosque <- 0
no.potenciacion <- 0
no.red <- 0
# Este ciclo es el que hace validación cruzada con 10 grupos
for (k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
ttraining <- datos[-muestra, ]
modelo <- svm(BuenPagador ~ ., data = ttraining, kernel = "linear")
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.svm <- no.svm + MC["No", "No"]
modelo <- train.kknn(BuenPagador ~ ., data = ttraining, kmax = 37)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.knn <- no.knn + MC["No", "No"]
modelo <- naiveBayes(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.bayes <- no.bayes + MC["No", "No"]
modelo = rpart(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting, type = "class")
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.arbol <- no.arbol + MC["No", "No"]
modelo <- randomForest(BuenPagador ~ ., data = ttraining, importance = TRUE)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.bosque <- no.bosque + MC["No", "No"]
modelo <- ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.potenciacion <- no.potenciacion + MC["No", "No"]
modelo <- nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01,
decay = 5e-4, maxit = 45, trace = TRUE)
prediccion <- predict(modelo, ttesting[, -6], type = "class")
Actual <- ttesting[, 6]
MC <- table(Actual, factor(prediccion, levels = levels(Actual)), exclude = FALSE)
# Detección de los No Pagadores
no.red <- no.red + MC["No", "No"]
}
deteccion.no.svm[i] <- no.svm
deteccion.no.knn[i] <- no.knn
deteccion.no.bayes[i] <- no.bayes
deteccion.no.arbol[i] <- no.arbol
deteccion.no.bosque[i] <- no.bosque
deteccion.no.potenciacion[i] <- no.potenciacion
deteccion.no.red[i] <- no.red
}# weights: 1901
initial value 3020.277405
final value 1845.781240
converged
# weights: 1901
initial value 3003.706914
iter 10 value 1842.193469
iter 20 value 1752.240599
iter 30 value 1417.255478
iter 40 value 1116.694492
final value 1082.819465
stopped after 45 iterations
# weights: 1901
initial value 3120.584716
iter 10 value 1820.367939
iter 20 value 1593.933733
iter 30 value 1392.387815
iter 40 value 1040.669627
final value 1036.342667
stopped after 45 iterations
# weights: 1901
initial value 3106.219773
final value 1813.250010
converged
# weights: 1901
initial value 3173.972889
final value 1827.776628
converged
# weights: 1901
initial value 3105.589827
final value 1825.964347
converged
# weights: 1901
initial value 3124.400970
final value 1815.061913
converged
# weights: 1901
initial value 3333.485926
iter 10 value 1840.406664
iter 20 value 1840.169356
iter 30 value 1642.703475
iter 40 value 1412.207776
final value 1400.035380
stopped after 45 iterations
# weights: 1901
initial value 3110.079355
final value 1840.397692
converged
# weights: 1901
initial value 3136.483621
final value 1833.194645
converged
# weights: 1901
initial value 3263.961852
iter 10 value 1824.001161
iter 20 value 1634.391557
iter 30 value 1410.378600
iter 40 value 1371.308418
final value 1367.482427
stopped after 45 iterations
# weights: 1901
initial value 3067.354770
final value 1833.195139
converged
# weights: 1901
initial value 3096.451510
iter 10 value 1843.768687
iter 20 value 1645.717362
iter 30 value 1393.155493
iter 40 value 1207.541368
final value 1090.492226
stopped after 45 iterations
# weights: 1901
initial value 3044.483957
iter 10 value 1831.917723
iter 20 value 1413.445288
iter 30 value 1100.934568
iter 40 value 1087.352989
final value 1072.633947
stopped after 45 iterations
# weights: 1901
initial value 3143.919351
final value 1820.523135
converged
# weights: 1901
initial value 3048.424715
iter 10 value 1816.868064
iter 20 value 1815.956718
iter 30 value 1339.785928
iter 40 value 1119.750695
final value 1073.043586
stopped after 45 iterations
# weights: 1901
initial value 3125.940508
iter 10 value 1831.405591
iter 20 value 1830.753867
iter 30 value 1535.739119
iter 40 value 1411.756695
final value 1317.821758
stopped after 45 iterations
# weights: 1901
initial value 3075.696871
iter 10 value 1831.430985
iter 20 value 1829.058822
iter 30 value 1577.511363
iter 40 value 1134.718283
final value 1082.438398
stopped after 45 iterations
# weights: 1901
initial value 3177.982337
final value 1829.582561
converged
# weights: 1901
initial value 3184.850709
iter 10 value 1829.464509
iter 20 value 1786.397740
iter 30 value 1216.832813
iter 40 value 1106.321998
final value 1041.365086
stopped after 45 iterations
# weights: 1901
initial value 3158.287169
iter 10 value 1825.963125
iter 10 value 1825.963107
iter 10 value 1825.963107
final value 1825.963107
converged
# weights: 1901
initial value 3093.312781
iter 10 value 1836.800612
iter 10 value 1836.800612
iter 10 value 1836.800612
final value 1836.800612
converged
# weights: 1901
initial value 3021.261127
final value 1824.151937
converged
# weights: 1901
initial value 3103.915963
iter 10 value 1827.362231
iter 20 value 1695.043590
iter 30 value 1422.039244
iter 40 value 1203.135290
final value 1038.898564
stopped after 45 iterations
# weights: 1901
initial value 3064.679301
final value 1838.600038
converged
# weights: 1901
initial value 3174.940997
iter 10 value 1835.017474
final value 1835.004627
converged
# weights: 1901
initial value 3148.073575
iter 10 value 1833.194400
iter 10 value 1833.194399
iter 10 value 1833.194399
final value 1833.194399
converged
# weights: 1901
initial value 3135.122053
iter 10 value 1842.020450
iter 20 value 1734.179013
iter 30 value 1514.515517
iter 40 value 1230.359919
final value 1172.454452
stopped after 45 iterations
# weights: 1901
initial value 3102.717405
final value 1827.775249
converged
# weights: 1901
initial value 3150.888392
iter 10 value 1813.233305
iter 20 value 1797.583187
iter 30 value 1428.495055
iter 40 value 1393.238769
final value 1391.757474
stopped after 45 iterations
# weights: 1901
initial value 3082.259386
iter 10 value 1821.458071
iter 20 value 1593.305963
iter 30 value 1233.001262
iter 40 value 1188.046083
final value 1174.997359
stopped after 45 iterations
# weights: 1901
initial value 3102.796660
iter 10 value 1829.608844
iter 20 value 1829.073314
iter 30 value 1589.995321
iter 40 value 1307.205076
final value 1167.087942
stopped after 45 iterations
# weights: 1901
initial value 3061.253572
iter 10 value 1827.803429
iter 20 value 1827.695247
iter 30 value 1796.108444
iter 40 value 1285.538775
final value 1192.584986
stopped after 45 iterations
# weights: 1901
initial value 3258.625724
iter 10 value 1802.270713
iter 20 value 1801.865417
iter 30 value 1534.509310
iter 40 value 1208.490603
final value 1152.772055
stopped after 45 iterations
# weights: 1901
initial value 3172.539907
iter 10 value 1819.037274
iter 20 value 1368.226738
iter 30 value 1034.573967
iter 40 value 1022.003084
final value 1021.468336
stopped after 45 iterations
# weights: 1901
initial value 3311.143715
final value 1825.964269
converged
# weights: 1901
initial value 3049.909020
final value 1824.156212
converged
# weights: 1901
initial value 3088.166026
final value 1833.260620
converged
# weights: 1901
initial value 3034.130841
final value 1849.379528
converged
# weights: 1901
initial value 3028.780316
iter 10 value 1852.951007
iter 20 value 1851.090195
iter 30 value 1438.487630
iter 40 value 1070.974552
final value 1054.899336
stopped after 45 iterations
# weights: 1901
initial value 3163.099089
iter 10 value 1840.969270
iter 20 value 1693.248698
iter 30 value 1510.711223
iter 40 value 1204.954465
final value 1113.818700
stopped after 45 iterations
# weights: 1901
initial value 3111.730276
final value 1829.584193
converged
# weights: 1901
initial value 3169.882964
final value 1824.160701
converged
# weights: 1901
initial value 3083.903725
final value 1827.778604
converged
# weights: 1901
initial value 3043.905549
iter 10 value 1822.312719
iter 20 value 1618.436171
iter 30 value 1127.426086
iter 40 value 1045.885130
final value 1042.357861
stopped after 45 iterations
# weights: 1901
initial value 3143.902850
iter 10 value 1841.928121
iter 20 value 1265.397321
iter 30 value 1172.214780
iter 40 value 1170.063762
final value 1169.567422
stopped after 45 iterations
# weights: 1901
initial value 3059.800442
iter 10 value 1842.195280
iter 10 value 1842.195275
iter 10 value 1842.195275
final value 1842.195275
converged
# weights: 1901
initial value 3182.683884
iter 10 value 1813.207178
iter 20 value 1563.116703
iter 30 value 1543.599097
iter 40 value 1527.193922
final value 1516.032529
stopped after 45 iterations
# weights: 1901
initial value 3016.000734
final value 1824.153091
converged
# weights: 1901
initial value 3249.107480
iter 10 value 1836.916607
iter 20 value 1836.855474
iter 30 value 1834.692543
iter 40 value 1820.122464
final value 1625.082429
stopped after 45 iterations
Graficamos los resultados
resultados <- data.frame("svm" = deteccion.no.svm,
"k_vecinos" = deteccion.no.knn,
"bayes" = deteccion.no.bayes,
"arboles" = deteccion.no.arbol,
"bosques" = deteccion.no.bosque,
"potenciacion" = deteccion.no.potenciacion,
"redes_nnet" = deteccion.no.red)
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Tiempo de ejecución
Time difference of 6.678352 mins
La manipulación de los datos se puede hacer muy pesada cuando tratamos con xgboost y neuralnet, pero con trainR resulta más fácil.
Se cargan las librerías
setwd("~/Desktop/Datos/")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)# weights: 1901
initial value 3076.088096
iter 10 value 1835.020682
iter 20 value 1835.012939
iter 30 value 1834.622540
iter 40 value 1599.264900
final value 1463.533835
stopped after 45 iterations
[1] train-error:0.050222
[11] train-error:0.045111
[21] train-error:0.039778
[31] train-error:0.038222
[41] train-error:0.036000
[51] train-error:0.032000
[61] train-error:0.030667
[71] train-error:0.027778
[79] train-error:0.026444
# weights: 1901
initial value 3162.693012
iter 10 value 1852.696027
iter 20 value 1589.821904
iter 30 value 1141.641796
final value 1067.906609
converged
[1] train-error:0.051111
[11] train-error:0.045333
[21] train-error:0.042222
[31] train-error:0.036000
[41] train-error:0.035111
[51] train-error:0.033778
[61] train-error:0.032889
[71] train-error:0.032222
[79] train-error:0.031333
# weights: 1901
initial value 3107.992599
final value 1840.396844
converged
[1] train-error:0.053556
[11] train-error:0.045778
[21] train-error:0.041778
[31] train-error:0.037556
[41] train-error:0.036222
[51] train-error:0.034222
[61] train-error:0.032667
[71] train-error:0.030222
[79] train-error:0.029333
# weights: 1901
initial value 3101.406156
final value 1805.924215
converged
[1] train-error:0.049111
[11] train-error:0.044667
[21] train-error:0.041333
[31] train-error:0.039111
[41] train-error:0.037556
[51] train-error:0.034667
[61] train-error:0.031556
[71] train-error:0.030889
[79] train-error:0.030000
# weights: 1901
initial value 3036.594334
iter 10 value 1854.748043
iter 20 value 1854.719841
iter 30 value 1854.416318
iter 40 value 1817.502686
final value 1698.110585
stopped after 45 iterations
[1] train-error:0.051778
[11] train-error:0.046444
[21] train-error:0.040000
[31] train-error:0.037778
[41] train-error:0.034889
[51] train-error:0.032667
[61] train-error:0.031778
[71] train-error:0.029778
[79] train-error:0.029778
# weights: 1901
initial value 3095.351764
final value 1827.774537
converged
[1] train-error:0.047778
[11] train-error:0.044889
[21] train-error:0.040222
[31] train-error:0.037778
[41] train-error:0.035556
[51] train-error:0.033778
[61] train-error:0.032444
[71] train-error:0.030444
[79] train-error:0.029556
# weights: 1901
initial value 3154.302596
final value 1800.418802
converged
[1] train-error:0.049778
[11] train-error:0.044667
[21] train-error:0.040000
[31] train-error:0.036889
[41] train-error:0.035111
[51] train-error:0.034222
[61] train-error:0.032222
[71] train-error:0.030889
[79] train-error:0.029111
# weights: 1901
initial value 3118.765116
iter 10 value 1824.209871
iter 20 value 1631.710053
iter 30 value 1164.042729
iter 40 value 1107.641284
final value 1056.151836
stopped after 45 iterations
[1] train-error:0.057556
[11] train-error:0.046444
[21] train-error:0.040889
[31] train-error:0.038889
[41] train-error:0.035556
[51] train-error:0.033333
[61] train-error:0.031556
[71] train-error:0.030222
[79] train-error:0.027556
# weights: 1901
initial value 3117.891292
iter 10 value 1811.354011
iter 20 value 1799.000540
iter 30 value 1458.531180
iter 40 value 1170.070617
final value 1054.418319
stopped after 45 iterations
[1] train-error:0.048222
[11] train-error:0.042889
[21] train-error:0.038222
[31] train-error:0.036444
[41] train-error:0.034000
[51] train-error:0.031556
[61] train-error:0.031111
[71] train-error:0.030889
[79] train-error:0.028889
# weights: 1901
initial value 3035.718705
final value 1849.359520
converged
[1] train-error:0.050667
[11] train-error:0.044222
[21] train-error:0.040222
[31] train-error:0.038000
[41] train-error:0.036000
[51] train-error:0.034889
[61] train-error:0.032444
[71] train-error:0.030444
[79] train-error:0.029556
# weights: 1901
initial value 3154.273292
iter 10 value 1836.789403
iter 20 value 1810.409912
iter 30 value 1511.086996
iter 40 value 1265.016043
final value 1114.714119
stopped after 45 iterations
[1] train-error:0.052889
[11] train-error:0.046667
[21] train-error:0.041778
[31] train-error:0.039333
[41] train-error:0.037556
[51] train-error:0.036000
[61] train-error:0.035333
[71] train-error:0.034222
[79] train-error:0.033333
# weights: 1901
initial value 3134.411375
final value 1838.604753
converged
[1] train-error:0.050222
[11] train-error:0.045556
[21] train-error:0.042222
[31] train-error:0.038222
[41] train-error:0.037333
[51] train-error:0.035111
[61] train-error:0.034222
[71] train-error:0.033111
[79] train-error:0.031111
# weights: 1901
initial value 3210.394228
iter 10 value 1765.408467
iter 20 value 1361.139961
iter 30 value 1151.455900
iter 40 value 1135.927711
final value 1135.235221
stopped after 45 iterations
[1] train-error:0.048444
[11] train-error:0.042667
[21] train-error:0.042444
[31] train-error:0.037778
[41] train-error:0.035556
[51] train-error:0.034667
[61] train-error:0.032000
[71] train-error:0.029556
[79] train-error:0.028222
# weights: 1901
initial value 3139.420506
final value 1831.389854
converged
[1] train-error:0.050000
[11] train-error:0.042889
[21] train-error:0.038222
[31] train-error:0.036222
[41] train-error:0.034000
[51] train-error:0.032444
[61] train-error:0.030444
[71] train-error:0.030222
[79] train-error:0.029111
# weights: 1901
initial value 3023.793717
final value 1843.991150
converged
[1] train-error:0.051778
[11] train-error:0.046889
[21] train-error:0.042000
[31] train-error:0.037111
[41] train-error:0.035778
[51] train-error:0.032889
[61] train-error:0.030889
[71] train-error:0.030444
[79] train-error:0.028222
# weights: 1901
initial value 3041.677910
iter 10 value 1833.208728
iter 20 value 1833.168464
iter 30 value 1831.912924
iter 40 value 1822.623622
final value 1817.620483
stopped after 45 iterations
[1] train-error:0.050667
[11] train-error:0.043778
[21] train-error:0.038000
[31] train-error:0.035778
[41] train-error:0.032889
[51] train-error:0.031111
[61] train-error:0.029333
[71] train-error:0.027778
[79] train-error:0.026889
# weights: 1901
initial value 3217.457242
iter 10 value 1820.221295
iter 20 value 1684.472010
iter 30 value 1151.853767
iter 40 value 1014.578548
final value 1013.604655
stopped after 45 iterations
[1] train-error:0.050889
[11] train-error:0.046444
[21] train-error:0.040444
[31] train-error:0.037778
[41] train-error:0.036444
[51] train-error:0.033333
[61] train-error:0.030889
[71] train-error:0.028889
[79] train-error:0.027778
# weights: 1901
initial value 3126.615705
iter 10 value 1843.671620
iter 20 value 1684.263628
iter 30 value 1326.992800
iter 40 value 1184.850965
final value 1177.957471
stopped after 45 iterations
[1] train-error:0.050444
[11] train-error:0.043778
[21] train-error:0.040889
[31] train-error:0.038000
[41] train-error:0.036222
[51] train-error:0.032889
[61] train-error:0.032222
[71] train-error:0.030000
[79] train-error:0.029333
# weights: 1901
initial value 3110.415956
final value 1829.582575
converged
[1] train-error:0.051556
[11] train-error:0.045111
[21] train-error:0.041333
[31] train-error:0.039333
[41] train-error:0.034889
[51] train-error:0.033778
[61] train-error:0.031111
[71] train-error:0.031333
[79] train-error:0.031111
# weights: 1901
initial value 3104.581665
iter 10 value 1822.079621
iter 20 value 1600.200537
iter 30 value 1470.347491
iter 40 value 1418.970381
final value 1228.439176
stopped after 45 iterations
[1] train-error:0.056444
[11] train-error:0.042444
[21] train-error:0.040222
[31] train-error:0.038000
[41] train-error:0.035333
[51] train-error:0.034667
[61] train-error:0.033778
[71] train-error:0.031556
[79] train-error:0.030000
# weights: 1901
initial value 3100.447784
iter 10 value 1835.023241
iter 20 value 1800.101294
iter 30 value 1647.747500
iter 40 value 1633.807346
final value 1630.931751
stopped after 45 iterations
[1] train-error:0.048667
[11] train-error:0.045778
[21] train-error:0.040667
[31] train-error:0.036444
[41] train-error:0.034889
[51] train-error:0.032444
[61] train-error:0.031333
[71] train-error:0.028889
[79] train-error:0.027778
# weights: 1901
initial value 3059.078037
iter 10 value 1809.373591
iter 20 value 1540.843259
iter 30 value 1279.951559
iter 40 value 1249.486679
final value 1241.846832
stopped after 45 iterations
[1] train-error:0.049111
[11] train-error:0.042889
[21] train-error:0.040000
[31] train-error:0.036444
[41] train-error:0.034000
[51] train-error:0.030667
[61] train-error:0.030222
[71] train-error:0.029333
[79] train-error:0.027778
# weights: 1901
initial value 3074.550497
iter 10 value 1842.195406
iter 10 value 1842.195406
iter 10 value 1842.195406
final value 1842.195406
converged
[1] train-error:0.050222
[11] train-error:0.046222
[21] train-error:0.043111
[31] train-error:0.038000
[41] train-error:0.036667
[51] train-error:0.034667
[61] train-error:0.031111
[71] train-error:0.028889
[79] train-error:0.028889
# weights: 1901
initial value 3115.129671
iter 10 value 1849.367971
iter 20 value 1811.214148
iter 30 value 1228.269822
iter 40 value 1145.113723
final value 1142.081014
stopped after 45 iterations
[1] train-error:0.051111
[11] train-error:0.047778
[21] train-error:0.040889
[31] train-error:0.037556
[41] train-error:0.036667
[51] train-error:0.034667
[61] train-error:0.033556
[71] train-error:0.032444
[79] train-error:0.030889
# weights: 1901
initial value 3225.371411
iter 10 value 1843.966978
iter 20 value 1835.168841
iter 30 value 1813.319657
iter 40 value 1806.635442
final value 1802.127517
stopped after 45 iterations
[1] train-error:0.059556
[11] train-error:0.047333
[21] train-error:0.041111
[31] train-error:0.038222
[41] train-error:0.037333
[51] train-error:0.035333
[61] train-error:0.033333
[71] train-error:0.033333
[79] train-error:0.032222
# weights: 1901
initial value 3133.322343
iter 10 value 1827.566280
iter 20 value 1776.632003
iter 30 value 1522.672268
iter 40 value 1267.670738
final value 1093.291090
stopped after 45 iterations
[1] train-error:0.049778
[11] train-error:0.044889
[21] train-error:0.041556
[31] train-error:0.038222
[41] train-error:0.035333
[51] train-error:0.033556
[61] train-error:0.032444
[71] train-error:0.031111
[79] train-error:0.030444
# weights: 1901
initial value 3229.744133
iter 10 value 1831.388919
iter 20 value 1799.960239
iter 30 value 1600.972094
iter 40 value 1400.900649
final value 1389.106361
stopped after 45 iterations
[1] train-error:0.052889
[11] train-error:0.045333
[21] train-error:0.041778
[31] train-error:0.038444
[41] train-error:0.037111
[51] train-error:0.034889
[61] train-error:0.032444
[71] train-error:0.029778
[79] train-error:0.028889
# weights: 1901
initial value 3140.988052
iter 10 value 1820.532634
iter 20 value 1820.459039
iter 30 value 1749.091616
iter 40 value 1635.110210
final value 1480.448803
stopped after 45 iterations
[1] train-error:0.057111
[11] train-error:0.047333
[21] train-error:0.042667
[31] train-error:0.040000
[41] train-error:0.034667
[51] train-error:0.034444
[61] train-error:0.030889
[71] train-error:0.029333
[79] train-error:0.028000
# weights: 1901
initial value 3088.474052
final value 1815.059784
converged
[1] train-error:0.052000
[11] train-error:0.045333
[21] train-error:0.040222
[31] train-error:0.039111
[41] train-error:0.035111
[51] train-error:0.033111
[61] train-error:0.031556
[71] train-error:0.030222
[79] train-error:0.028000
# weights: 1901
initial value 3179.070658
iter 10 value 1831.439979
iter 20 value 1829.840994
iter 30 value 1728.856879
iter 40 value 1428.713389
final value 1319.808004
stopped after 45 iterations
[1] train-error:0.049556
[11] train-error:0.045333
[21] train-error:0.040889
[31] train-error:0.036667
[41] train-error:0.035778
[51] train-error:0.032889
[61] train-error:0.031778
[71] train-error:0.031333
[79] train-error:0.030444
# weights: 1901
initial value 3111.869753
iter 10 value 1798.482424
iter 20 value 1634.262759
iter 30 value 1407.430783
iter 40 value 1262.020721
final value 1261.602522
stopped after 45 iterations
[1] train-error:0.048444
[11] train-error:0.043778
[21] train-error:0.041111
[31] train-error:0.038222
[41] train-error:0.035556
[51] train-error:0.032889
[61] train-error:0.032667
[71] train-error:0.031111
[79] train-error:0.029333
# weights: 1901
initial value 3190.418320
iter 10 value 1823.900818
iter 20 value 1670.987854
iter 30 value 1368.686305
iter 40 value 1360.163741
final value 1357.155873
stopped after 45 iterations
[1] train-error:0.050222
[11] train-error:0.044889
[21] train-error:0.041333
[31] train-error:0.036889
[41] train-error:0.034444
[51] train-error:0.032889
[61] train-error:0.032667
[71] train-error:0.029556
[79] train-error:0.028667
# weights: 1901
initial value 3064.705146
iter 10 value 1838.529818
iter 20 value 1816.003190
iter 30 value 1492.034378
iter 40 value 1256.460708
final value 1132.594022
stopped after 45 iterations
[1] train-error:0.052667
[11] train-error:0.045111
[21] train-error:0.039778
[31] train-error:0.035333
[41] train-error:0.033778
[51] train-error:0.032000
[61] train-error:0.031111
[71] train-error:0.030000
[79] train-error:0.029333
# weights: 1901
initial value 3148.904334
final value 1843.991820
converged
[1] train-error:0.051556
[11] train-error:0.046444
[21] train-error:0.042667
[31] train-error:0.039333
[41] train-error:0.035111
[51] train-error:0.033556
[61] train-error:0.032222
[71] train-error:0.030667
[79] train-error:0.029333
# weights: 1901
initial value 3064.982169
final value 1833.195576
converged
[1] train-error:0.056444
[11] train-error:0.044889
[21] train-error:0.041333
[31] train-error:0.036889
[41] train-error:0.034889
[51] train-error:0.031556
[61] train-error:0.031111
[71] train-error:0.029778
[79] train-error:0.030000
# weights: 1901
initial value 3153.525690
iter 10 value 1822.290081
iter 20 value 1769.438798
iter 30 value 1503.262713
iter 40 value 1101.680445
final value 1074.484593
stopped after 45 iterations
[1] train-error:0.050000
[11] train-error:0.046667
[21] train-error:0.040889
[31] train-error:0.035778
[41] train-error:0.034222
[51] train-error:0.032889
[61] train-error:0.029778
[71] train-error:0.028889
[79] train-error:0.027333
# weights: 1901
initial value 3114.213602
final value 1845.779598
converged
[1] train-error:0.052444
[11] train-error:0.047556
[21] train-error:0.040889
[31] train-error:0.039778
[41] train-error:0.038667
[51] train-error:0.034222
[61] train-error:0.032000
[71] train-error:0.031556
[79] train-error:0.030222
# weights: 1901
initial value 3208.984377
iter 10 value 1829.585874
final value 1829.582665
converged
[1] train-error:0.048444
[11] train-error:0.044667
[21] train-error:0.041111
[31] train-error:0.038000
[41] train-error:0.035778
[51] train-error:0.033111
[61] train-error:0.031556
[71] train-error:0.030444
[79] train-error:0.027778
# weights: 1901
initial value 3280.817103
iter 10 value 1806.237526
iter 20 value 1368.384462
iter 30 value 1078.085505
iter 40 value 1072.407260
final value 1069.573117
stopped after 45 iterations
[1] train-error:0.049778
[11] train-error:0.045556
[21] train-error:0.040889
[31] train-error:0.038222
[41] train-error:0.036000
[51] train-error:0.035111
[61] train-error:0.034222
[71] train-error:0.032667
[79] train-error:0.032222
# weights: 1901
initial value 3092.852716
iter 10 value 1822.235561
iter 20 value 1797.391231
iter 30 value 1632.278895
iter 40 value 1621.629173
final value 1577.489159
stopped after 45 iterations
[1] train-error:0.049556
[11] train-error:0.044889
[21] train-error:0.042000
[31] train-error:0.038667
[41] train-error:0.034222
[51] train-error:0.031111
[61] train-error:0.030889
[71] train-error:0.028889
[79] train-error:0.026889
# weights: 1901
initial value 3063.946078
iter 10 value 1819.295279
iter 20 value 1803.444927
iter 30 value 1364.477555
iter 40 value 1057.047987
final value 1046.094658
stopped after 45 iterations
[1] train-error:0.048889
[11] train-error:0.046000
[21] train-error:0.040222
[31] train-error:0.036667
[41] train-error:0.036000
[51] train-error:0.036222
[61] train-error:0.034222
[71] train-error:0.030444
[79] train-error:0.028222
# weights: 1901
initial value 3180.552883
final value 1851.149454
converged
[1] train-error:0.058667
[11] train-error:0.046000
[21] train-error:0.042889
[31] train-error:0.039111
[41] train-error:0.037111
[51] train-error:0.035111
[61] train-error:0.034444
[71] train-error:0.031556
[79] train-error:0.029778
# weights: 1901
initial value 3188.825731
iter 10 value 1843.963318
iter 20 value 1722.213799
iter 30 value 1447.073116
iter 40 value 1094.429537
final value 1078.473233
stopped after 45 iterations
[1] train-error:0.053778
[11] train-error:0.049111
[21] train-error:0.044889
[31] train-error:0.039111
[41] train-error:0.037333
[51] train-error:0.033778
[61] train-error:0.032444
[71] train-error:0.030222
[79] train-error:0.029333
# weights: 1901
initial value 3107.260324
final value 1822.347934
converged
[1] train-error:0.049778
[11] train-error:0.044889
[21] train-error:0.041333
[31] train-error:0.037111
[41] train-error:0.034222
[51] train-error:0.034889
[61] train-error:0.032444
[71] train-error:0.030667
[79] train-error:0.029333
# weights: 1901
initial value 3139.263295
iter 10 value 1824.147487
iter 20 value 1777.940533
iter 30 value 1105.850376
iter 40 value 1033.424197
final value 1032.212510
stopped after 45 iterations
[1] train-error:0.051111
[11] train-error:0.047556
[21] train-error:0.042444
[31] train-error:0.040889
[41] train-error:0.039556
[51] train-error:0.037556
[61] train-error:0.036222
[71] train-error:0.035333
[79] train-error:0.035111
# weights: 1901
initial value 3084.727687
iter 10 value 1835.864363
iter 20 value 1659.344148
iter 30 value 1471.723468
iter 40 value 1406.067405
final value 1225.055745
stopped after 45 iterations
[1] train-error:0.051111
[11] train-error:0.043556
[21] train-error:0.040000
[31] train-error:0.036667
[41] train-error:0.034000
[51] train-error:0.033333
[61] train-error:0.031333
[71] train-error:0.030000
[79] train-error:0.029556
# weights: 1901
initial value 3032.365676
final value 1822.337914
converged
[1] train-error:0.049778
[11] train-error:0.046444
[21] train-error:0.042000
[31] train-error:0.038444
[41] train-error:0.035333
[51] train-error:0.032889
[61] train-error:0.031778
[71] train-error:0.029111
[79] train-error:0.028667
# weights: 1901
initial value 3143.875613
final value 1807.758050
converged
[1] train-error:0.046889
[11] train-error:0.042222
[21] train-error:0.036444
[31] train-error:0.033333
[41] train-error:0.031778
[51] train-error:0.030889
[61] train-error:0.030222
[71] train-error:0.028444
[79] train-error:0.027333
# weights: 1901
initial value 3124.084951
final value 1833.201254
converged
[1] train-error:0.050667
[11] train-error:0.045111
[21] train-error:0.040444
[31] train-error:0.037778
[41] train-error:0.034889
[51] train-error:0.032444
[61] train-error:0.031333
[71] train-error:0.028667
[79] train-error:0.028000
# weights: 1901
initial value 3224.947735
final value 1843.988378
converged
[1] train-error:0.049333
[11] train-error:0.043556
[21] train-error:0.038889
[31] train-error:0.037111
[41] train-error:0.034000
[51] train-error:0.030667
[61] train-error:0.028889
[71] train-error:0.027111
[79] train-error:0.026222
Graficamos los resultados
resultados <- data.frame("svm" = deteccion.no.svm,
"k_vecinos" = deteccion.no.knn,
"bayes" = deteccion.no.bayes,
"arboles" = deteccion.no.arbol,
"bosques" = deteccion.no.bosque,
"potenciacion" = deteccion.no.potenciacion,
"redes_nnet" = deteccion.no.red,
"xgboost" = deteccion.no.xgboost,
"redes_neuralnet" = no.red.neu,
"regresion_logistica" = deteccion.no.glm)
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Tiempo de ejecución
Time difference of 10.08091 mins
Otra manera de hacerlo:
# weights: 1901
initial value 3076.722632
iter 10 value 1831.389076
iter 20 value 1826.024729
iter 30 value 1537.808027
iter 40 value 1527.749390
final value 1455.281455
stopped after 45 iterations
[1] train-error:0.049333
[11] train-error:0.045333
[21] train-error:0.039333
[31] train-error:0.038222
[41] train-error:0.037111
[51] train-error:0.033778
[61] train-error:0.032444
[71] train-error:0.031778
[79] train-error:0.030222
# weights: 1901
initial value 3005.546246
iter 10 value 1848.328958
iter 20 value 1746.831733
iter 30 value 1536.456219
iter 40 value 1408.852275
final value 1406.695280
stopped after 45 iterations
[1] train-error:0.052222
[11] train-error:0.048222
[21] train-error:0.044000
[31] train-error:0.040000
[41] train-error:0.038222
[51] train-error:0.034667
[61] train-error:0.032444
[71] train-error:0.030222
[79] train-error:0.030000
# weights: 1901
initial value 3191.563771
final value 1854.715116
converged
[1] train-error:0.051333
[11] train-error:0.046889
[21] train-error:0.041778
[31] train-error:0.039778
[41] train-error:0.036222
[51] train-error:0.033556
[61] train-error:0.031333
[71] train-error:0.029333
[79] train-error:0.028444
# weights: 1901
initial value 3186.904269
iter 10 value 1820.520396
iter 20 value 1756.496215
iter 30 value 1310.069908
iter 40 value 1083.963747
final value 1044.752472
stopped after 45 iterations
[1] train-error:0.051333
[11] train-error:0.045333
[21] train-error:0.040889
[31] train-error:0.034889
[41] train-error:0.033778
[51] train-error:0.032000
[61] train-error:0.031778
[71] train-error:0.030667
[79] train-error:0.029556
# weights: 1901
initial value 3047.426613
iter 10 value 1829.550220
iter 20 value 1614.479731
iter 30 value 1388.615085
iter 40 value 1381.385633
final value 1380.711425
stopped after 45 iterations
[1] train-error:0.051111
[11] train-error:0.046667
[21] train-error:0.041111
[31] train-error:0.036889
[41] train-error:0.034889
[51] train-error:0.032222
[61] train-error:0.030000
[71] train-error:0.028444
[79] train-error:0.028000
# weights: 1901
initial value 3126.278412
final value 1815.059870
converged
[1] train-error:0.050000
[11] train-error:0.045333
[21] train-error:0.040889
[31] train-error:0.039111
[41] train-error:0.035111
[51] train-error:0.032444
[61] train-error:0.032000
[71] train-error:0.031111
[79] train-error:0.030889
# weights: 1901
initial value 3156.848906
iter 10 value 1798.560892
iter 20 value 1669.501881
iter 30 value 1353.350771
iter 40 value 1345.976640
final value 1343.951901
stopped after 45 iterations
[1] train-error:0.048444
[11] train-error:0.042444
[21] train-error:0.036667
[31] train-error:0.034667
[41] train-error:0.033556
[51] train-error:0.030889
[61] train-error:0.030222
[71] train-error:0.029556
[79] train-error:0.029111
# weights: 1901
initial value 3056.955086
iter 10 value 1843.663628
iter 20 value 1692.098818
iter 30 value 1276.904989
iter 40 value 1070.054820
final value 1052.590803
stopped after 45 iterations
[1] train-error:0.058667
[11] train-error:0.046889
[21] train-error:0.043111
[31] train-error:0.039111
[41] train-error:0.035556
[51] train-error:0.035111
[61] train-error:0.034000
[71] train-error:0.033111
[79] train-error:0.032889
# weights: 1901
initial value 3063.459191
iter 10 value 1833.177803
iter 20 value 1802.597691
iter 30 value 1474.026516
iter 40 value 1363.813914
final value 1356.092300
stopped after 45 iterations
[1] train-error:0.051111
[11] train-error:0.046000
[21] train-error:0.038667
[31] train-error:0.035778
[41] train-error:0.034000
[51] train-error:0.032222
[61] train-error:0.030222
[71] train-error:0.029556
[79] train-error:0.028667
# weights: 1901
initial value 3052.888660
iter 10 value 1825.197178
iter 20 value 1539.573884
iter 30 value 1380.402770
iter 40 value 1155.059073
final value 1136.965839
stopped after 45 iterations
[1] train-error:0.053111
[11] train-error:0.044222
[21] train-error:0.039556
[31] train-error:0.036444
[41] train-error:0.033778
[51] train-error:0.032222
[61] train-error:0.030667
[71] train-error:0.029778
[79] train-error:0.029556
# weights: 1901
initial value 3137.735617
iter 10 value 1847.560150
iter 20 value 1845.554808
iter 30 value 1402.959115
iter 40 value 1386.604484
final value 1385.323194
stopped after 45 iterations
[1] train-error:0.053556
[11] train-error:0.044889
[21] train-error:0.040000
[31] train-error:0.037556
[41] train-error:0.036000
[51] train-error:0.035333
[61] train-error:0.032889
[71] train-error:0.031778
[79] train-error:0.029556
# weights: 1901
initial value 3143.431212
iter 10 value 1832.117172
final value 1831.390557
converged
[1] train-error:0.050667
[11] train-error:0.044889
[21] train-error:0.040667
[31] train-error:0.037333
[41] train-error:0.035333
[51] train-error:0.034889
[61] train-error:0.032667
[71] train-error:0.031111
[79] train-error:0.031333
# weights: 1901
initial value 3054.092383
final value 1827.774519
converged
[1] train-error:0.050222
[11] train-error:0.043333
[21] train-error:0.040000
[31] train-error:0.038889
[41] train-error:0.038000
[51] train-error:0.035778
[61] train-error:0.033111
[71] train-error:0.032444
[79] train-error:0.030444
# weights: 1901
initial value 3290.685151
iter 10 value 1832.829666
final value 1827.774880
converged
[1] train-error:0.057556
[11] train-error:0.047778
[21] train-error:0.043333
[31] train-error:0.041111
[41] train-error:0.038000
[51] train-error:0.035778
[61] train-error:0.033333
[71] train-error:0.032000
[79] train-error:0.031778
# weights: 1901
initial value 3125.894526
iter 10 value 1845.783115
iter 20 value 1717.248265
iter 30 value 1130.272271
iter 40 value 1072.969837
final value 1069.842988
stopped after 45 iterations
[1] train-error:0.052000
[11] train-error:0.046444
[21] train-error:0.040000
[31] train-error:0.038000
[41] train-error:0.034889
[51] train-error:0.033333
[61] train-error:0.031778
[71] train-error:0.030222
[79] train-error:0.027333
# weights: 1901
initial value 3110.300187
final value 1820.521567
converged
[1] train-error:0.049778
[11] train-error:0.043111
[21] train-error:0.040000
[31] train-error:0.036667
[41] train-error:0.034444
[51] train-error:0.033111
[61] train-error:0.030889
[71] train-error:0.028889
[79] train-error:0.028000
# weights: 1901
initial value 3054.797559
final value 1827.786482
converged
[1] train-error:0.049778
[11] train-error:0.044222
[21] train-error:0.039111
[31] train-error:0.037333
[41] train-error:0.034222
[51] train-error:0.032444
[61] train-error:0.030889
[71] train-error:0.028667
[79] train-error:0.027556
# weights: 1901
initial value 3099.875373
iter 10 value 1813.178824
iter 20 value 1617.134195
iter 30 value 1477.764822
iter 40 value 1429.632727
final value 1405.054187
stopped after 45 iterations
[1] train-error:0.048889
[11] train-error:0.043333
[21] train-error:0.040000
[31] train-error:0.036667
[41] train-error:0.033556
[51] train-error:0.032444
[61] train-error:0.030889
[71] train-error:0.028889
[79] train-error:0.027778
# weights: 1901
initial value 3100.198027
final value 1838.599936
converged
[1] train-error:0.051333
[11] train-error:0.044889
[21] train-error:0.040667
[31] train-error:0.036667
[41] train-error:0.036222
[51] train-error:0.034444
[61] train-error:0.031333
[71] train-error:0.030667
[79] train-error:0.029111
# weights: 1901
initial value 3174.318508
iter 10 value 1824.023367
iter 20 value 1483.168265
iter 30 value 1185.096534
iter 40 value 1047.315197
final value 1044.307795
stopped after 45 iterations
[1] train-error:0.049556
[11] train-error:0.044000
[21] train-error:0.040000
[31] train-error:0.037111
[41] train-error:0.036000
[51] train-error:0.034222
[61] train-error:0.031111
[71] train-error:0.028889
[79] train-error:0.028667
# weights: 1901
initial value 3170.411684
iter 10 value 1847.560930
iter 20 value 1531.768983
iter 30 value 1223.786218
iter 40 value 1129.855849
final value 1112.054935
stopped after 45 iterations
[1] train-error:0.057111
[11] train-error:0.046889
[21] train-error:0.043111
[31] train-error:0.039556
[41] train-error:0.036667
[51] train-error:0.035111
[61] train-error:0.033778
[71] train-error:0.032000
[79] train-error:0.030889
# weights: 1901
initial value 3086.747530
iter 10 value 1818.701689
iter 10 value 1818.701689
iter 10 value 1818.701689
final value 1818.701689
converged
[1] train-error:0.050667
[11] train-error:0.044667
[21] train-error:0.041333
[31] train-error:0.038889
[41] train-error:0.036889
[51] train-error:0.034444
[61] train-error:0.032444
[71] train-error:0.031778
[79] train-error:0.030444
# weights: 1901
initial value 3172.044081
final value 1849.360648
converged
[1] train-error:0.052444
[11] train-error:0.048444
[21] train-error:0.043333
[31] train-error:0.039556
[41] train-error:0.036222
[51] train-error:0.033778
[61] train-error:0.032667
[71] train-error:0.029111
[79] train-error:0.027556
# weights: 1901
initial value 3100.067719
iter 10 value 1836.792061
iter 20 value 1835.916803
iter 30 value 1544.536826
iter 40 value 1080.072734
final value 1071.472628
stopped after 45 iterations
[1] train-error:0.050222
[11] train-error:0.042889
[21] train-error:0.040000
[31] train-error:0.035778
[41] train-error:0.033111
[51] train-error:0.031778
[61] train-error:0.031111
[71] train-error:0.029111
[79] train-error:0.027111
# weights: 1901
initial value 3053.943013
final value 1815.061391
converged
[1] train-error:0.050000
[11] train-error:0.044222
[21] train-error:0.040889
[31] train-error:0.036667
[41] train-error:0.034222
[51] train-error:0.032889
[61] train-error:0.031333
[71] train-error:0.030000
[79] train-error:0.028222
# weights: 1901
initial value 3159.393930
iter 10 value 1829.583186
final value 1829.556175
converged
[1] train-error:0.051556
[11] train-error:0.044444
[21] train-error:0.040667
[31] train-error:0.038444
[41] train-error:0.035111
[51] train-error:0.033556
[61] train-error:0.030667
[71] train-error:0.029333
[79] train-error:0.028889
# weights: 1901
initial value 3118.968084
final value 1843.987301
converged
[1] train-error:0.051333
[11] train-error:0.046000
[21] train-error:0.040889
[31] train-error:0.038889
[41] train-error:0.035556
[51] train-error:0.034444
[61] train-error:0.032222
[71] train-error:0.029556
[79] train-error:0.029111
# weights: 1901
initial value 3075.248528
iter 10 value 1822.358558
iter 20 value 1822.255959
iter 30 value 1586.340000
iter 40 value 1220.461498
final value 1151.192629
stopped after 45 iterations
[1] train-error:0.049778
[11] train-error:0.046000
[21] train-error:0.039556
[31] train-error:0.035556
[41] train-error:0.033333
[51] train-error:0.031111
[61] train-error:0.031111
[71] train-error:0.029778
[79] train-error:0.029111
# weights: 1901
initial value 3138.301024
iter 10 value 1819.955625
iter 20 value 1587.318952
iter 30 value 1121.262952
iter 40 value 1050.378468
final value 1043.084654
stopped after 45 iterations
[1] train-error:0.051333
[11] train-error:0.046000
[21] train-error:0.040667
[31] train-error:0.038000
[41] train-error:0.034667
[51] train-error:0.032222
[61] train-error:0.031333
[71] train-error:0.030889
[79] train-error:0.030000
# weights: 1901
initial value 3095.150003
iter 10 value 1820.427664
iter 20 value 1590.642018
iter 30 value 1418.557702
iter 40 value 1409.389810
final value 1406.585138
stopped after 45 iterations
[1] train-error:0.049778
[11] train-error:0.046000
[21] train-error:0.040667
[31] train-error:0.038667
[41] train-error:0.036444
[51] train-error:0.033556
[61] train-error:0.032667
[71] train-error:0.030889
[79] train-error:0.030444
# weights: 1901
initial value 3152.902972
iter 10 value 1798.707063
iter 20 value 1763.878679
iter 30 value 1458.190670
iter 40 value 1061.689737
final value 1048.386426
stopped after 45 iterations
[1] train-error:0.048000
[11] train-error:0.043778
[21] train-error:0.041111
[31] train-error:0.038000
[41] train-error:0.034667
[51] train-error:0.032667
[61] train-error:0.030667
[71] train-error:0.028889
[79] train-error:0.028444
# weights: 1901
initial value 3137.134475
final value 1851.146463
converged
[1] train-error:0.052444
[11] train-error:0.047333
[21] train-error:0.042667
[31] train-error:0.039111
[41] train-error:0.035778
[51] train-error:0.034889
[61] train-error:0.031778
[71] train-error:0.030444
[79] train-error:0.029111
# weights: 1901
initial value 3057.256334
iter 10 value 1851.147520
final value 1851.147186
converged
[1] train-error:0.051333
[11] train-error:0.048444
[21] train-error:0.044000
[31] train-error:0.039111
[41] train-error:0.037556
[51] train-error:0.034444
[61] train-error:0.031556
[71] train-error:0.031333
[79] train-error:0.029778
# weights: 1901
initial value 3160.896625
iter 10 value 1845.779618
iter 10 value 1845.779607
iter 10 value 1845.779607
final value 1845.779607
converged
[1] train-error:0.050222
[11] train-error:0.043778
[21] train-error:0.040667
[31] train-error:0.037556
[41] train-error:0.035778
[51] train-error:0.034222
[61] train-error:0.032000
[71] train-error:0.030222
[79] train-error:0.028889
# weights: 1901
initial value 3315.852361
iter 10 value 1822.338834
iter 10 value 1822.338832
iter 10 value 1822.338832
final value 1822.338832
converged
[1] train-error:0.050889
[11] train-error:0.048444
[21] train-error:0.042444
[31] train-error:0.039778
[41] train-error:0.036222
[51] train-error:0.033333
[61] train-error:0.031556
[71] train-error:0.031111
[79] train-error:0.030000
# weights: 1901
initial value 3110.476518
final value 1827.776042
converged
[1] train-error:0.050000
[11] train-error:0.046222
[21] train-error:0.040889
[31] train-error:0.036222
[41] train-error:0.034222
[51] train-error:0.031778
[61] train-error:0.030000
[71] train-error:0.028444
[79] train-error:0.027111
# weights: 1901
initial value 3022.493787
iter 10 value 1818.741779
iter 20 value 1818.703973
iter 30 value 1818.569096
iter 40 value 1699.538366
final value 1533.280642
stopped after 45 iterations
[1] train-error:0.050222
[11] train-error:0.046667
[21] train-error:0.041556
[31] train-error:0.037778
[41] train-error:0.035778
[51] train-error:0.034444
[61] train-error:0.032000
[71] train-error:0.030667
[79] train-error:0.029778
# weights: 1901
initial value 3182.801901
iter 10 value 1826.009714
final value 1825.966407
converged
[1] train-error:0.049333
[11] train-error:0.043333
[21] train-error:0.040444
[31] train-error:0.038000
[41] train-error:0.037111
[51] train-error:0.033778
[61] train-error:0.032000
[71] train-error:0.030889
[79] train-error:0.029556
# weights: 1901
initial value 3289.782524
final value 1838.610104
converged
[1] train-error:0.050222
[11] train-error:0.043333
[21] train-error:0.039778
[31] train-error:0.035778
[41] train-error:0.034000
[51] train-error:0.030667
[61] train-error:0.029556
[71] train-error:0.028889
[79] train-error:0.027778
# weights: 1901
initial value 3101.824882
iter 10 value 1824.167867
iter 20 value 1824.115255
iter 30 value 1823.713714
iter 40 value 1688.358832
final value 1418.648485
stopped after 45 iterations
[1] train-error:0.056444
[11] train-error:0.046000
[21] train-error:0.040667
[31] train-error:0.036667
[41] train-error:0.035556
[51] train-error:0.030667
[61] train-error:0.030222
[71] train-error:0.030444
[79] train-error:0.028889
# weights: 1901
initial value 3128.894675
iter 10 value 1849.404857
iter 20 value 1849.182319
iter 30 value 1841.687680
iter 40 value 1819.650125
final value 1667.790761
stopped after 45 iterations
[1] train-error:0.057778
[11] train-error:0.044667
[21] train-error:0.042222
[31] train-error:0.037556
[41] train-error:0.035111
[51] train-error:0.034222
[61] train-error:0.032667
[71] train-error:0.030667
[79] train-error:0.029333
# weights: 1901
initial value 3174.199778
iter 10 value 1822.766754
iter 20 value 1618.779038
iter 30 value 1223.862095
iter 40 value 1215.180183
final value 1214.847912
stopped after 45 iterations
[1] train-error:0.049778
[11] train-error:0.046667
[21] train-error:0.042222
[31] train-error:0.038667
[41] train-error:0.035778
[51] train-error:0.033111
[61] train-error:0.032000
[71] train-error:0.031111
[79] train-error:0.029333
# weights: 1901
initial value 3204.646934
final value 1818.707025
converged
[1] train-error:0.050222
[11] train-error:0.044444
[21] train-error:0.040444
[31] train-error:0.038000
[41] train-error:0.035111
[51] train-error:0.032889
[61] train-error:0.030889
[71] train-error:0.030222
[79] train-error:0.028667
# weights: 1901
initial value 3065.384238
final value 1833.197577
converged
[1] train-error:0.050889
[11] train-error:0.047111
[21] train-error:0.041778
[31] train-error:0.038889
[41] train-error:0.035333
[51] train-error:0.033556
[61] train-error:0.033111
[71] train-error:0.030889
[79] train-error:0.029333
# weights: 1901
initial value 3164.108749
final value 1804.093519
converged
[1] train-error:0.046667
[11] train-error:0.044444
[21] train-error:0.040222
[31] train-error:0.036444
[41] train-error:0.034222
[51] train-error:0.031778
[61] train-error:0.030000
[71] train-error:0.028667
[79] train-error:0.028444
# weights: 1901
initial value 3077.067709
iter 10 value 1833.338926
final value 1833.194528
converged
[1] train-error:0.050667
[11] train-error:0.046444
[21] train-error:0.038889
[31] train-error:0.037111
[41] train-error:0.034889
[51] train-error:0.034000
[61] train-error:0.033333
[71] train-error:0.031333
[79] train-error:0.030000
# weights: 1901
initial value 3153.085178
iter 10 value 1827.571386
iter 20 value 1531.849977
iter 30 value 1373.047949
iter 40 value 1257.315726
final value 1074.179902
stopped after 45 iterations
[1] train-error:0.049778
[11] train-error:0.044889
[21] train-error:0.038889
[31] train-error:0.037333
[41] train-error:0.034889
[51] train-error:0.032222
[61] train-error:0.030222
[71] train-error:0.029778
[79] train-error:0.029333
# weights: 1901
initial value 3125.681209
iter 10 value 1839.918878
final value 1825.974266
converged
[1] train-error:0.049778
[11] train-error:0.044444
[21] train-error:0.039111
[31] train-error:0.036444
[41] train-error:0.033778
[51] train-error:0.030889
[61] train-error:0.030667
[71] train-error:0.029111
[79] train-error:0.028222
# weights: 1901
initial value 3070.507126
iter 10 value 1840.165015
iter 20 value 1510.484369
iter 30 value 1070.959935
iter 40 value 1053.090016
final value 1051.247461
stopped after 45 iterations
[1] train-error:0.051556
[11] train-error:0.046667
[21] train-error:0.042222
[31] train-error:0.039333
[41] train-error:0.037333
[51] train-error:0.032889
[61] train-error:0.032667
[71] train-error:0.031333
[79] train-error:0.030444
# weights: 1901
initial value 3002.223524
final value 1847.575111
converged
[1] train-error:0.053778
[11] train-error:0.048000
[21] train-error:0.042667
[31] train-error:0.040444
[41] train-error:0.037333
[51] train-error:0.035333
[61] train-error:0.034889
[71] train-error:0.031778
[79] train-error:0.030889
Graficamos los resultados
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=.05, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Tiempo de ejecución
Time difference of 10.48027 mins
Se cargan las librerías
setwd("~/Desktop/Datos/")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)Proceso Paralelo
Constructor del cluster
clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5
tiempo.paralelo <- Sys.time()
resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
library(caret)
library(e1071)
library(kknn)
library(class)
library(rpart)
library(randomForest)
library(ada)
library(nnet)
library(dplyr)
numero.filas <- nrow(datos)
cantidad.grupos <- 10
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
no.svm <- 0
no.knn <- 0
no.bayes <- 0
no.arbol <- 0
no.bosque <- 0
no.potenciacion <- 0
no.red <- 0
# Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
# grupos (Folds)
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
ttraining <- datos[-muestra, ]
modelo <- svm(BuenPagador ~ ., data = ttraining, kernel = "linear")
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.svm <- no.svm + MC["No", "No"]
modelo <- train.kknn(BuenPagador ~ ., data = ttraining, kmax = 37)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.knn <- no.knn + MC["No", "No"]
modelo <- naiveBayes(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.bayes <- no.bayes + MC["No", "No"]
modelo = rpart(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting, type = "class")
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.arbol <- no.arbol + MC["No", "No"]
modelo <- randomForest(BuenPagador ~ ., data = ttraining, importance = TRUE)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.bosque <- no.bosque + MC["No", "No"]
modelo <- ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
no.potenciacion <- no.potenciacion + MC["No", "No"]
modelo <- nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01,
decay = 5e-4, maxit = 45, trace = TRUE)
prediccion <- predict(modelo, ttesting[, -6], type = "class")
Actual <- ttesting[, 6]
MC <- table(Actual, factor(prediccion, levels = levels(Actual)), exclude = FALSE)
# Detección de los No Pagadores
no.red <- no.red + MC["No", "No"]
}
return(list("svm" = no.svm,
"knn" = no.knn,
"bayes" = no.bayes,
"arboles" = no.arbol,
"bosques" = no.bosque,
"potenciacion" = no.potenciacion,
"redes_nnet" = no.red))
})
tiempo.paralelo <- Sys.time() - tiempo.paralelo
stopCluster(clp)Time difference of 1.848197 mins
El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor
svm knn bayes arboles bosques potenciacion redes_nnet
[1,] 399 516 135 491 503 488 111
[2,] 399 511 133 497 505 497 123
[3,] 399 513 137 493 505 492 162
[4,] 399 503 137 496 504 483 32
[5,] 399 502 137 488 500 490 120
Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Se cargan las librerías
setwd("~/Desktop/Datos/")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)Proceso Paralelo
clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5
tiempo.paralelo <- Sys.time()
resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
library(caret)
library(trainR)
numero.filas <- nrow(datos)
cantidad.grupos <- 10
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
no.svm <- 0
no.knn <- 0
no.bayes <- 0
no.arbol <- 0
no.bosque <- 0
no.potenciacion <- 0
no.red <- 0
no.xg <- 0
no.red.neu <- 0
no.glm <- 0
# Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
# grupos (Folds)
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
ttraining <- datos[-muestra, ]
modelo <- train.svm(BuenPagador ~ ., data = ttraining, kernel = "linear", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.svm <- no.svm + MC["No", "No"]
modelo <- train.knn(BuenPagador ~ ., data = ttraining, kmax = 37)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.knn <- no.knn + MC["No", "No"]
modelo <- train.bayes(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.bayes <- no.bayes + MC["No", "No"]
modelo = train.rpart(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.arbol <- no.arbol + MC["No", "No"]
modelo <- train.randomForest(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.bosque <- no.bosque + MC["No", "No"]
modelo <- train.ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.potenciacion <- no.potenciacion + MC["No", "No"]
modelo <- train.nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01,
decay = 5e-4, maxit = 45, trace = TRUE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.red <- no.red + MC["No", "No"]
modelo <- train.xgboost(BuenPagador ~ ., data = ttraining, nrounds = 79,
print_every_n = 10, maximize = F , eval_metric = "error")
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.xg <- no.xg + MC["No", "No"]
modelo <- train.neuralnet(BuenPagador ~., data = ttraining, hidden = c(3, 2,6),
linear.output = FALSE, threshold = 0.5, stepmax = 1e+06)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.red.neu <- no.red.neu + MC["No", "No"]
modelo <- train.glm(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
no.glm <- no.glm + MC["No", "No"]
}
return(list("svm" = no.svm,
"knn" = no.knn,
"bayes" = no.bayes,
"arboles" = no.arbol,
"bosques" = no.bosque,
"potenciacion" = no.potenciacion,
"redes_nnet" = no.red,
"xgboost" = no.xg,
"redes_neuralnet" = no.red.neu,
"regresion_logistica" = no.glm))
})
tiempo.paralelo <- Sys.time() - tiempo.paralelo
stopCluster(clp)Time difference of 3.998378 mins
El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor
svm knn bayes arboles bosques potenciacion redes_nnet xgboost
[1,] 399 510 140 494 501 494 57 504
[2,] 399 509 138 494 503 491 114 502
[3,] 399 510 139 483 506 495 132 499
[4,] 402 513 136 483 507 488 112 508
[5,] 400 510 136 493 508 495 160 505
redes_neuralnet regresion_logistica
[1,] 372 381
[2,] 307 375
[3,] 243 377
[4,] 211 379
[5,] 257 375
Graficamos los resultados
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Detección del NO pagador",
xlab = "Número de iteración",
ylab = "Cantidad de NO pagadores detectados",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Se cargan las librerías
setwd("~/Desktop/Datos/")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)Proceso Paralelo
Constructor del cluster
clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5
tiempo.paralelo <- Sys.time()
resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
library(caret)
library(e1071)
library(kknn)
library(class)
library(rpart)
library(randomForest)
library(ada)
library(nnet)
library(dplyr)
numero.filas <- nrow(datos)
cantidad.grupos <- 10
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
error.svm <- 0
error.knn <- 0
error.bayes <- 0
error.arbol <- 0
error.bosque <- 0
error.potenciacion <- 0
error.red <- 0
# Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
# grupos (Folds)
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
ttraining <- datos[-muestra, ]
modelo <- svm(BuenPagador ~ ., data = ttraining, kernel = "linear")
prediccion <- predict(modelo, ttesting)
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
error.svm <- error.svm + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.kknn(BuenPagador ~ ., data = ttraining, kmax = 37)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
error.knn <- error.knn + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- naiveBayes(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
error.bayes <- error.bayes + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo = rpart(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting, type = "class")
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
error.arbol <- error.arbol + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- randomForest(BuenPagador ~ ., data = ttraining, importance = TRUE)
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
error.bosque <- error.bosque + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
prediccion <- predict(modelo, ttesting[, -6])
Actual <- ttesting[, 6]
MC <- table(Actual, prediccion)
# Detección de los No Pagadores
error.potenciacion <- error.potenciacion + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01,
decay = 5e-4, maxit = 45, trace = TRUE)
prediccion <- predict(modelo, ttesting[, -6], type = "class")
Actual <- ttesting[, 6]
MC <- table(Actual, factor(prediccion, levels = levels(Actual)), exclude = FALSE)
# Detección de los No Pagadores
error.red <- error.red + (1 - (sum(diag(MC)) / sum(MC))) * 100
}
return(list("svm" = error.svm / cantidad.grupos,
"knn" = error.knn / cantidad.grupos,
"bayes" = error.bayes / cantidad.grupos,
"arboles" = error.arbol / cantidad.grupos,
"bosques" = error.bosque / cantidad.grupos,
"potenciacion" = error.potenciacion / cantidad.grupos,
"redes_nnet" = error.red / cantidad.grupos))
})
tiempo.paralelo <- Sys.time() - tiempo.paralelo
stopCluster(clp)Time difference of 1.883579 mins
El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor
svm knn bayes arboles bosques potenciacion redes_nnet
[1,] 7.26 5.48 15.1 5.48 5.12 5.82 11.84
[2,] 7.24 5.14 14.84 5.38 4.98 5.82 11.92
[3,] 7.26 5.42 14.9 5.4 5.1 5.52 11.44
[4,] 7.26 5.48 14.9 5.42 4.98 6.2 12.2
[5,] 7.24 5.22 14.88 5.42 4.94 6.1 13.3
Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Comparación del Error Global",
xlab = "Número de iteración",
ylab = "Error Global",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))Se cargan las librerías
setwd("~/Desktop/Datos/")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)Proceso Paralelo
clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5
tiempo.paralelo <- Sys.time()
resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
library(caret)
library(trainR)
numero.filas <- nrow(datos)
cantidad.grupos <- 10
grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
error.svm <- 0
error.knn <- 0
error.bayes <- 0
error.arbol <- 0
error.bosque <- 0
error.potenciacion <- 0
error.red <- 0
error.xg <- 0
error.red.neu <- 0
error.glm <- 0
# Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
# grupos (Folds)
for(k in 1:cantidad.grupos) {
muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
ttesting <- datos[muestra, ]
ttraining <- datos[-muestra, ]
modelo <- train.svm(BuenPagador ~ ., data = ttraining, kernel = "linear", probability = FALSE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.svm <- error.svm + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.knn(BuenPagador ~ ., data = ttraining, kmax = 37)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.knn <- error.knn + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.bayes(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.bayes <- error.bayes + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo = train.rpart(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.arbol <- error.arbol + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.randomForest(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.bosque <- error.bosque + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.potenciacion <- error.potenciacion + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01,
decay = 5e-4, maxit = 45, trace = TRUE)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.red <- error.red + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.xgboost(BuenPagador ~ ., data = ttraining, nrounds = 79,
print_every_n = 10, maximize = F , eval_metric = "error")
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.xg <- error.xg + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.neuralnet(BuenPagador ~., data = ttraining, hidden = c(3, 2,6),
linear.output = FALSE, threshold = 0.5, stepmax = 1e+06)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.red.neu <- error.red.neu + (1 - (sum(diag(MC)) / sum(MC))) * 100
modelo <- train.glm(BuenPagador ~ ., data = ttraining)
prediccion <- predict(modelo, ttesting)
MC <- confusion.matrix(ttesting, prediccion)
# Detección de los No Pagadores
error.glm <- error.glm + (1 - (sum(diag(MC)) / sum(MC))) * 100
}
return(list("svm" = error.svm,
"knn" = error.knn,
"bayes" = error.bayes,
"arboles" = error.arbol,
"bosques" = error.bosque,
"potenciacion" = error.potenciacion,
"redes_nnet" = error.red,
"xgboost" = error.xg,
"redes_neuralnet" = error.red.neu,
"regresion_logistica" = error.glm))
})
tiempo.paralelo <- Sys.time() - tiempo.paralelo
stopCluster(clp)Time difference of 3.808758 mins
El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor
svm knn bayes arboles bosques potenciacion redes_nnet xgboost
[1,] 72.4 52.8 149.2 54.2 50.8 57.4 113 55.6
[2,] 72.6 52.4 149.4 54 50.6 55.6 125 55
[3,] 72.4 53.8 150.6 54.2 49 59 135 52.8
[4,] 72.6 52.2 149.8 55.6 49.8 56.4 129.6 52.8
[5,] 72.2 52.8 149.8 54.2 50 57.2 134 54.8
redes_neuralnet regresion_logistica
[1,] NaN 73.4
[2,] NaN 72.6
[3,] NaN 73.4
[4,] NaN 73.4
[5,] NaN 73.2
Graficamos los resultados
matplot(resultados, type="b", lty = 1, lwd = 1, pch = 1:ncol(resultados),
main = "Comparación del Error Global",
xlab = "Número de iteración",
ylab = "Error Global",
col = rainbow(ncol(resultados)))
legend('bottomright', inset=0, legend = colnames(resultados),
pch=1:ncol(resultados), horiz = TRUE, col = rainbow(ncol(resultados)))